﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KOPLibrary.Cacheflow.CacheflowDsTableAdapters;
using KOPLibrary.DataManagement.Cacheflow;
using System.IO;
using System.Reflection;

namespace KOPLibrary.Forms.CashFlow
{
    public partial class MainCashflowForm : Form
    {
        private Microsoft.Office.Interop.Excel.Application excelApp = null;
        Cacheflow.CacheflowDs ds;

        private Microsoft.Office.Interop.Excel.Application Excel
        {
            get
            {
                if (excelApp == null)
                    excelApp = new Microsoft.Office.Interop.Excel.Application();
                return excelApp;
            }
        }

        public MainCashflowForm()
        {
            InitializeComponent();
        }

        public void Execute()
        {
            Execute(null);
        }

        public  void Execute(Microsoft.Office.Interop.Excel.Application excelApp)
        {
            this.excelApp = excelApp;
            ctlAccountsUc.BeforeCommit += new EventHandler(ctlAccountsUc_BeforeCommit);
            LoadData();
            ctlFlowUc.existingApp = excelApp;
            ShowDialog();

        }

        void ctlAccountsUc_BeforeCommit(object sender, EventArgs e)
        {
            ctlMainAccounts.Commit();
        }

        private void LoadData()
        {
             ds = DataLayer.LoadCachflowData(); 
            

            //Ana_HesapTableAdapter adapter = new Ana_HesapTableAdapter();
            //adapter.Fill(ds.Ana_Hesap);

            //HesapTableAdapter accAdapter = new HesapTableAdapter();
            //accAdapter.Fill(ds.Hesap);

            //HareketTableAdapter flowAdapter = new HareketTableAdapter();
            //flowAdapter.Fill(ds.Hareket);

            ctlMainAccounts.Bind(ds);
            ctlAccountsUc.BindAsDetail(ctlMainAccounts.BindingSource, "Ana HesapHesap");
            ctlFlowUc.Bind(ds, ctlMainAccounts.BindingSource, "Ana HesapHesap");
            if (ds.Ana_Hesap.Count > 0)
                tabMain.SelectedTab = tabFlow;
            CheckIfCreateSampleData(ds);
            

        }

        private void MainCashflowForm_Load(object sender, EventArgs e)
        {

        }

        public static bool CheckIfCreateSampleData(Cacheflow.CacheflowDs data)
        {
            if (data.Ana_Hesap.Count == 0 && data.Hesap.Count == 0 && data.Hareket.Count == 0)
            {
                if (Util.Confirm("Sizin için hazırladığımız örnek nakit akış verilerini yükleyerek analiz ortamına hızlıca gözatmak ister misiniz ?" + Environment.NewLine + Environment.NewLine +
                                 "Not: Dilediğiniz zaman Eklenti | Tanımlar | Nakit Akış Tanımları penceresini kullanarak örnek verileri silebilir ve kendi nakit akış tanımlarınızı yapmaya başlayabilirsiniz."))
                {
                    CreateSampleData(data);
                    Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
                    ExcelExporter exporter = new ExcelExporter(app, ExportType.CreateNew);
                    try
                    {
                        exporter.CreateAnalyse(data.Hareket.DefaultView);
                        DataLayer.SaveCachflowData(data);
                    }
                    finally
                    {
                        app.Visible = true;
                    }
                    return true;
                }
                else return false;
            }
            else return false;
        }

        private void ctlMainAccounts_Load(object sender, EventArgs e)
        {

        }

        private void ctlOK_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void tabMain_SelectedIndexChanged(object sender, EventArgs e)
        {
            ctlMainAccounts.Commit();
            ctlAccountsUc.Commit();
        }

        private void MainCashflowForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            ctlMainAccounts.Commit();
            ctlAccountsUc.Commit();
            ctlFlowUc.Commit();
        }

        private void ctlCreateSample_Click(object sender, EventArgs e)
        {
            CreateSampleData(ds);
        }

        public static void CreateSampleData(Cacheflow.CacheflowDs data)
        {
            if (data.Ana_Hesap.Count > 0 || data.Hesap.Count > 0 || data.Hareket.Count > 0)
            {
                if (!Util.Confirm("Bu işlem mevcut nakit akış verilerinizin yerine örnek verilerin yazılmasını sağlayacaktır." + Environment.NewLine + Environment.NewLine +
                    "Not: Mevcut verilerinizi Eklenti | Tanımlar | Nakit Akış Tanımları penceresini kullanarak yedekleyebilirsiniz." + Environment.NewLine +Environment.NewLine +
                    "Devam etmek istiyor musunuz ?"))
                    return;
            }
            using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("KOPLibrary.Resources.Sampleflowdata.xml"))
            {
                data.Clear();
                data.ReadXml(stream);
                stream.Close();
            }
        }


    }
}
